home *** CD-ROM | disk | FTP | other *** search
- {
- GUY MCLOUGHLIN
-
- >What's the easiest way to center an arbitrary string on a line?
- }
-
- program CenterStringDemo;
-
- { Return a copy of the MainString, with the SubString centered }
- { within it. Routine passes copies of variables on the STACK, }
- { taking up more STACK space than the one below, however variable }
- { strings passed as parameters are not permanently changed. }
- { }
- function CenterStr1(MainString, SubString : String) : String;
- Var
- InsertPos : byte;
- TempString : string;
- begin
- TempString := MainString;
- InsertPos := succ((length(MainString) - length(SubString)) div 2);
- move(SubString[1], TempString[InsertPos], length(SubString));
- CenterStr1 := TempString;
- end;
-
- { Center a sub-string withing the main-string. Routine uses VAR }
- { parameters which pass pointers to the actual variable being }
- { passed, making the changes permanent and saving on STACK space. }
- { }
- procedure CenterStr2(var MainString : string; var SubString : string);
- var
- InsertPos : byte;
- begin
- InsertPos := succ((length(MainString) - length(SubString)) div 2);
- move(SubString[1], MainString[InsertPos], length(SubString))
- end;
-
-
- var
- SubStr,
- MainStr,
- TempStr : string;
-
- BEGIN
- SubStr := '----------';
- MainStr := '012345678901234567890123456789';
- { Return string with sub-string centered in main- }
- { string. Neither sub-string or main-string variables }
- { are permanently affected. }
- TempStr := CenterStr1(MainStr, SubStr);
- writeln(SubStr);
- writeln(MainStr);
- writeln(TempStr);
- writeln;
-
- { Position sub-string in the center of main-string. }
- { Changes to main-string are permanent. }
- CenterStr2(MainStr, SubStr);
- writeln(SubStr);
- writeln(MainStr);
- writeln(TempStr)
- END.
-